package main

import (
	"fmt"
	"sync"
)

func main() {

	var syncMap sync.Map

	for i := 0; i < 2; i++ {
		store, loaded := syncMap.LoadOrStore("test", "TestValue")
		fmt.Println("store", store, "loaded", loaded)
	}

	// cancel map 放入orderId
	// match 尝试往map放 , loaded 为false，放入成功 代表该orderId没有被取消
	// cancel消息过来，尝试往map中放， loaded 为false 代表该订单还未经过撮合
	// 		loaded为true代表orderId已存在，代表orderId已经经历过撮合 此时应该取消失败

	// 撮合时，先尝试将orderId放入map, 放入失败 代表已取消
	// 撮合时, 匹配委托列表时先将委托单订单id放入map 放入失败, 代表该订单要取消了

	// 需求
	// 数据准确 单子一旦撮合成交过 不能再取消，单子一旦取消就不能再参与撮合
	// 未成交的单子可以进行撤单
	// 业务宕机后 数据可恢复

}
